package arithmetic.other;

/**
 * @author zhangyanqi
 * @since 1.0 2018/3/20
 * 小明刚刚看完电影《第39级台阶》。离开电影院的时候，他数了数礼堂前的台阶数，恰好是39级!
 * 站在台阶前，他突然又想着一个问题：
 * 如果我每一步只能迈上1个或2个台阶。先迈左脚，然后左右交替，最后一步是迈右脚，也就是说一共要走偶数步。那么，上完39级台阶，有多少种不同的上法呢？
 * 请你利用计算机的优势，帮助小明寻找答案。
 */
public class 第39级台阶 {

    /**
     * @param step  当前来走1步还是2步
     * @param goal  当前还剩多少步数
     * @param right 当前是否是右脚
     * @return 还有多少种情况
     */
    static int getWays(int step, int goal, boolean right) {
        if (!right && goal - step <= 0) {
            return 0;
        }
        if (right && (goal - step) == 0) {
            return 1;
        }
        if (right) {
            return getWays(1, goal - step, false) + getWays(2, goal - step, false);
        } else {
            return getWays(1, goal - step, true) + getWays(2, goal - step, true);
        }
    }

    public static void main(String[] args) {

        int i = getWays(1, 39, false) + getWays(2, 39, false);
        System.out.println(i);

    }
}